<?php
/**
 * Created by PhpStorm.
 * User: liubo
 * Date: 2018/3/12
 * Time: 10:01
 */
namespace app\back\controller;

use think\Controller;
use app\back\model\Role;
use app\back\validate\RoleValidate;
use think\Db;
use think\Session;
use app\back\model\Action;
class RoleController extends Controller
{

    //修改操作
    public function SetAction(){
        $id= input('get.id');//获取id
        $this->assign('id',$id);

        $request=request();//助手函数
        if($request->isGet()){
            if(Session::get('message')==''&&Session::get('data')==''){
                $message = [];
                $data = [];

                //如果不为空 插入数据库 显示出来
                if(!empty($id))
                    $data=Db::name('role')->find($id);//id主键 查询出来的数据
            }
            else{
                $message  = Session::get('message');
                $data = Session::get('data');
            }

            $this->assign('message',$message);
            $this->assign('data',$data);
            return $this->fetch();


        }
        elseif($request->isPost()){
            //数据库入库 获取数据
            $post_result=input('post.');
            //验证实例化
            $brand_validate = new RoleValidate;
            //check就是验证用户输入的数据是否合理
            //batch(批量验证)
            if( !$brand_validate->batch(true)->check($post_result)){
                return $this->redirect('set',[],302,[
                    'message'=>$brand_validate->getError(),
                    'data'=>$post_result
                ]);
            }else{

                //实例化
                $result=new Role;//如何修改数据
                if(!empty($post_result['id'])){//
//                echo 1;
                    $m=$result->find($post_result['id']);
                    $m->save($post_result);
                }
                else{
//                dump($post_result);
                    $result->save($post_result);//插入数据
                }

                if($request){
                    return $this->redirect('Index');
                }
                else{
                    return $this->redirect('set');
                }
            }

        }
        else{

        }
//    return $this->fetch();
    }
    //查询操作
    public  function  indexAction(){
        $model=new Role;
        //实例化
        //筛选
        //接受前台传递过来数组的参数
        $filter=input('filter/a',[]);
        $filter_order=[];

    

#判断是否具有title条件
$filter_title = input('filter_title','');
if($filter_title!=''){
$model->where('title','like','%'.$filter_title.'%');
$filter['filter_title'] =$filter_title;
}


#判断是否具有descrition条件
$filter_descrition = input('filter_descrition','');
if($filter_descrition!=''){
$model->where('descrition','like','%'.$filter_descrition.'%');
$filter['filter_descrition'] =$filter_descrition;
}



        //排序  先声明
        $order=input('order/a');
        if(!empty($order)){
            $model->order([$order['field']=>$order['type']]);
        }

        //分页
        $limt=2;
        $list=$model->paginate($limt,false,['query' => request()->param()]);
        $start=$limt*($list->currentPage()-1)+1;
        $end=$start+count($list)-1;

        $this->assign('start',$start);
        $this->assign('end',$end);
        $this->assign('filter',$filter);
        $this->assign('filter_order',$filter_order);
        $this->assign('order',$order);
        $this->assign('list',$list);
        return $this->fetch();
    }
    public function multiAction(){
        $selected=input('selected/a',[]);
        if(empty($selected)){
            return $this->redirect('index');
        }
        //批量删除
    Role::destroy($selected);
        return $this->redirect('index');
    }
    public function setactionAction(){
        $request = request();
        $id = input('id');
        $role = Role::get($id);
        $this->assign('role',$role);
        //要获取用户已经拥有的动作
        $owner_actions = Db::name('role_action')->where('role_id',$id)->column('action_id');
        if($request->isGet()){
            //获取全部权限
            $action_list = Action::order('id')->select();
            $this->assign('action_list',$action_list);
            //已有的动作
            $this->assign('checked_list',$owner_actions);
            return $this->fetch();
        }
        elseif($request->isPost()){

            //获取用户传递来的值

            $action = input('actions/a',[]);
            //更新role_action
            //如果品牌管理员这个角色以前有1,2 这两个权限
            //在传递的时候，1,3勾选住了，
            //第一个你要删除2，添加3权限，并且不要操作1权限。

            //计算两个数组的差集。
            //问题如果在1,2数组和，1，3数组，然后得到2
            $deletes  = array_diff($owner_actions,$action);//计算差集2

            //删除它没有勾选的
            Db::name('role_action')->where([
                'role_id'=>$id,
                'action_id'=>['in',$deletes]
            ])->delete();






            //如果你想要得到3
            $inserts =  array_diff($action,$owner_actions);//计算差集3

            //我想实现一个功能  $inserts数组
            //[3]   ===>  [['role_id'=>1,'action_id'=>3]]
            //批量插入数据怎么搞 //非常重要的点
            $rows = array_map(function ($action_id) use ($id){
                return [
                    'role_id'=>$id,
                    'action_id'=>$action_id
                ];
            }, $inserts);
            Db::name('role_action')->insertAll($rows);

            return $this->redirect('setaction',['id'=>$id]);

        }



    }

}

//http://www.shop.com/index.php/back/Brand/Brand